// src/router/componentLoader.js
// 1. 用 Vite Glob 导入扫描目标目录下的所有 .vue 组件
// 假设所有动态组件都在 src/components/ 和 src/views/ 目录下
const components = import.meta.glob([
    '@/components/**/*.vue', // 扫描 components 下所有子目录的 .vue 文件
    '@/views/**/*.vue'      // 扫描 views 下所有子目录的 .vue 文件
], {eager: true}); // eager: true 表示直接导入（非懒加载）

// 2. 生成组件路径映射表（键：相对路径，值：组件）
// 例如：将 "components/manager/BaseBreadcrumb.vue" 映射到对应的组件
export const componentMap = {};

Object.entries(components).forEach(([path, module]) => {
    // 处理路径格式：移除前缀 "@/" 和后缀 ".vue"，得到相对路径
    // 例如：将 "/src/components/manager/BaseBreadcrumb.vue" 转换为 "components/manager/OneLevelMenu"
    const key = path
        .replace(/^\/src\//, '') // 移除绝对路径中的 /src/
        .replace(/\.vue$/, '');  // 移除 .vue 后缀

    // 存储组件（Vite 中组件默认导出在 module.default 中）
    componentMap[key] = module.default;
});

// 3. 提供获取组件的工具函数
export const getComponent = (componentPath) => {
    const component = componentMap[componentPath];
    if (!component) {
        console.error(`未找到组件：${componentPath}，请检查路径是否正确`);
        // 可选：返回一个默认组件（如404提示组件）
        return {render: () => 'Component not found'};
    }
    return component;
};
